gint x,
gint y,
guint time);
+static void gtk_drag_dest_set_widget (GtkDragDestInfo *info,
+ GtkWidget *widget);
static GtkDragDestInfo * gtk_drag_get_dest_info (GdkDragContext *context,
gboolean create);
case GDK_DRAG_LEAVE:
if (info->widget)
{
- g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
- info->widget = NULL;
+ gtk_drag_dest_set_widget (info, NULL);
}
break;
*/
if (info->widget)
{
- g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
- info->widget = NULL;
+ gtk_drag_dest_set_widget (info, NULL);
}
}
if (info->widget && !found)
{
- g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
- info->widget = NULL;
+ gtk_drag_dest_set_widget (info, NULL);
}
/* Send a reply.
if (found && info->widget != widget)
{
if (info->widget)
- {
- g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
- gtk_drag_dest_leave (info->widget, context, time);
- }
+ gtk_drag_dest_leave (info->widget, context, time);
- info->widget = widget;
- g_object_add_weak_pointer (G_OBJECT (widget), (gpointer *) &info->widget);
+ gtk_drag_dest_set_widget (info, widget);
}
}
dest_info->proxy_source = source_info;
}
+static void
+gtk_drag_dest_set_widget (GtkDragDestInfo *info,
+ GtkWidget *widget)
+{
+ if (info->widget)
+ g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
+
+ info->widget = widget;
+
+ if (info->widget)
+ g_object_add_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
+}
+
static void
gtk_drag_dest_info_destroy (gpointer data)
{
GtkDragDestInfo *info = (GtkDragDestInfo *)data;
- if (info->widget)
- {
- g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
- }
+
+ gtk_drag_dest_set_widget (info, NULL);
+
g_slice_free (GtkDragDestInfo, data);
}